草庐IT

c++ - 虚函数对象切片

全部标签

Ruby:使用字符串/符号获取/设置对象的属性

在Ruby中,如何使用字符串/符号获取和设置对象的属性?例如,如果我有一个对象car,其属性为car.color和car.name。我知道您可以执行car.send(:color)来获取它的属性,但我该如何设置它呢? 最佳答案 car.send("name=",value)或者car.send("color=",value) 关于Ruby:使用字符串/符号获取/设置对象的属性,我们在StackOverflow上找到一个类似的问题: https://stacko

ruby-on-rails - 如何测试某个函数是否使用 Rails 和 rspec 2 中的事务

我有一个模型函数,我想确保它使用事务。例如:classModeldefmethodModel.transactiondo#dostuffendendend我目前的方法是在block内存入一个方法调用以引发ActiveRecord::Rollback异常,然后检查数据库是否真的发生了变化。但这意味着如果由于某种原因block内的实现发生变化,那么测试就会中断。你会如何测试这个? 最佳答案 你应该换个角度看问题。从行为的角度来看,测试函数是否使用事务是没有用的。它不会为您提供有关函数是否按预期运行的任何信息。您应该测试的是行为,即预期结

ruby - 散列中的 ActiveRecord 对象未被垃圾收集——一个错误或某种缓存功能?

我有一个名为Student的简单ActiveRecord模型,表中有100条记录。我在Rails控制台session中执行以下操作:ObjectSpace.each_object(ActiveRecord::Base).count#=>0x=Student.allObjectSpace.each_object(ActiveRecord::Base).count#=>100x=nilGC.startObjectSpace.each_object(ActiveRecord::Base).count#=>0#Good!现在我执行以下操作:ObjectSpace.each_object(Act

ruby - 优雅的 ruby​​ 语法返回两个对象中的较大者

当然有上千种方法可以做到这一点,但这是最简单(或最优雅)的方法吗?[4,8].max这其实也不算太寒酸,但你会怎么做呢? 最佳答案 如果您不想生成数组,可以使用条件运算符:max=a>b?a:b 关于ruby-优雅的ruby​​语法返回两个对象中的较大者,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2438885/

sql - 如何使用自定义加入 rails 来加载对象?

背景正常的rails预加载集合是这样工作的:Person.find(:all,:include=>:companies)这会生成一些执行的sqlLEFTOUTERJOINcompaniesONpeople.company_id=companies.id问题但是,我需要一个自定义连接(如果我使用find_by_sql也会出现这种情况)所以我不能使用vanilla:include=>:companies自定义join/sql将为我提供我需要的所有数据,但我如何告诉activerecord它属于关联的Company对象而不仅仅是一堆额外的行?更新我需要在联接中添加其他条件。像这样:SELEC

ruby-on-rails - Ruby 根据属性查找并返回数组中的对象

如果某个属性正确,如何遍历对象数组并返回整个对象?我的Rails应用程序中有以下内容array_of_objects.each{|favor|favor.completed==false}array_of_objects.each{|favor|favor.completed}但出于某种原因,这两个返回相同的结果!我尝试将each替换为collect、map、keep_if以及!favor.completed而不是favor.completed==false而它们都不起作用!非常感谢任何帮助! 最佳答案 array_of_objec

ruby - 哈希或其他对象的内存大小?

在Ruby1.9.3中以字节为单位获取给定散列(或任何对象)大小的最佳方法是什么?“FindnumberofbytesaparticularHashisusinginRuby”的解决方案在1.9.3中似乎无效,因为memsize_of不在ObjectSpace的文档中. 最佳答案 ObjectSpace.memsize_ofdoeswork在1.9.3中,记录与否:putsRUBY_VERSION#=>1.9.3require'objspace'pObjectSpace.memsize_of("a"*23)#=>23pObjectS

ruby - 在 Ruby 中,为什么 inspect() 会打印出某种与 object_id() 给出的不同的对象 ID?

p函数在打印出对象时,可能会给出一个ID,与object_id()给出的不同。不同数字的原因是什么?更新:0x4684abc不同于36971870,即0x234255E>>a=Point.new=>#>>a.object_id=>36971870>>a.__id__=>36971870>>"%X"%a.object_id=>"234255E" 最佳答案 inspect的默认实现调用了to_s的默认实现,它只是直接显示对象的十六进制值,如Object#to_s中所见docs(单击方法描述以显示来源)。同时,object_id实现的C源

ruby - 调用/应用 lambda 与函数调用 - Ruby 中的语法不同。为什么?

我对Ruby有点陌生,仍在努力理解一些语言设计原则。如果我做对了,Ruby中的lambda表达式调用必须使用方括号,而“常规”函数调用则使用“常规”/圆括号。语法不同是不是有什么特殊原因?或者,换句话说,(为什么)调用者应该知道他们是调用函数还是应用lambda表达式? 最佳答案 常规的Ruby方法调用使用()而不是用于block的花括号。如果您不喜欢[]来调用lambda,您始终可以使用call方法。例子:>>by_two=lambda{|x|x*2}#=>#>>by_two[5]#=>10>>by_two.call(5)#=>1

ruby - 如何列出从 Ruby 中的类创建的所有对象?

这个问题在这里已经有了答案:HowtofindeachinstanceofaclassinRuby(4个答案)关闭7年前。在Ruby中有什么方法可以让一个类知道它存在多少个实例并可以列出它们?这是一个示例类:classProjectattr_accessor:name,:tasksdefinitialize(options)@name=options[:name]@tasks=options[:tasks]enddefself.all#returnlistingofprojectobjectsenddefself.count#returnacountofexistingprojects